/*******************************************************************************
 * Copyright (c) 2012-2017 Codenvy, S.A.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *   Codenvy, S.A. - initial API and implementation
 *******************************************************************************/
package org.eclipse.che.plugin.docker.client.params.network;

import org.eclipse.che.plugin.docker.client.json.network.NewNetwork;

import javax.validation.constraints.NotNull;

import java.util.Objects;

import static java.util.Objects.requireNonNull;

/**
 * Arguments holder for {@link org.eclipse.che.plugin.docker.client.DockerConnector#createNetwork(CreateNetworkParams)}.
 *
 * @author Alexander Garagatyi
 */
public class CreateNetworkParams {
    // todo consider validation that network config has all required fields
    private NewNetwork network;

    private CreateNetworkParams() {}

    /**
     * Creates arguments holder with required parameters.
     *
     * @param newNetwork
     *         network configuration
     * @return arguments holder with required parameters
     * @throws NullPointerException
     *         if {@code newNetwork} is null
     */
    public static CreateNetworkParams create(@NotNull NewNetwork newNetwork) {
        return new CreateNetworkParams().withNetwork(newNetwork);
    }

    /**
     * Adds network name to this parameters.
     *
     * @param newNetwork
     *         network configuration
     * @return this params instance
     * @throws NullPointerException
     *         if {@code newNetwork} is null
     */
    public CreateNetworkParams withNetwork(@NotNull NewNetwork newNetwork) {
        requireNonNull(newNetwork);
        this.network = newNetwork;
        return this;
    }

    public NewNetwork getNetwork() {
        return network;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (!(obj instanceof CreateNetworkParams)) {
            return false;
        }
        final CreateNetworkParams that = (CreateNetworkParams)obj;
        return Objects.equals(network, that.network);
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 31 * hash + Objects.hashCode(network);
        return hash;
    }

    @Override
    public String toString() {
        return "CreateNetworkParams{" +
               "network=" + network +
               '}';
    }
}
